package com.liujg.future.model.entity;

import com.liujg.future.model.resp.Goods;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.List;

@EqualsAndHashCode(callSuper = true)
@Document("goods_detail")
@AllArgsConstructor
@NoArgsConstructor
@Data
public class GoodsDetail extends Goods {

    @Id
    private String id;

    /**
     * spu编码
     */
    private String spuCode;
    /**
     * 原价
     */

    private String oldPrice;

    /**
     * 库存
     */
    private Integer inventory;

    /**
     * 品牌信息
     */
    private Brand brand;

    /**
     * 销量
     */
    private Integer salesCount;

    /**
     * 评价数量
     */
    private Integer commentCount;

    /**
     * 收藏数量
     */
    private Integer collectCount;

    /**
     * 主图视频集合
     */
    private List<String> mainVideos;

    /**
     * 主图视频比例,1为1:1/16:9，2为3:4
     */
    private Integer videoScale;

    /**
     * 主图图片集合
     */
    private List<String> mainPictures;

    /**
     * 可选规格集合备注：规格集合一定要和skus集合下的specs 顺序保持一致
     */
    private List<Spec> specs;

    /**
     * sku集合
     */
    private List<Sku> skus;

    /**
     * 所属分类，多级以数组形式体现，如[一级分类，二级分类，三级分类]
     */
    private List<Category> categories;

    /**
     * 商品详情
     */
    private Details details;

    /**
     * 是否为预售商品
     */
    private Boolean isPreSale;

    private Boolean isCollect;

    // recommends  userAddresses evaluationInfo
    /**
     * 同类商品
     */
    private List<Goods> similarProducts;

    /**
     * 24小时热销
     */
    private List<Goods> hotByDay;

    @Data
    public static class Brand {

        private String id;
        private String name;

        private String nameEn;

        private String picture;

        private String logo;
        private String type;

        private String desc;

        private String place;

    }

    @Data
    public static class Spec {
        private String id;

        /**
         * 规格名称
         */
        private String name;

        /**
         * 可选值集合
         */
        private List<SpecValues> values;
    }

    @Data
    public static class SpecValues {

        /**
         * 可选值名称
         */
        private String name;

        /**
         * 可选值图片链接
         */
        private String picture;
        /**
         * 是否可售
         */
        private Boolean available;
        /**
         * 可选值备注
         */
        private String desc;
    }

    @Data
    public static class SpecSimple {

        /**
         * 规格名称
         */
        private String name;

        /**
         * 可选值名称
         */
        private String valueName;

    }



    @Data
    public static class Sku {

        /**
         * sku_id
         */
        private String id;

        private String skuCode;

        /**
         * 价格
         */
        private String price;

        private String oldPrice;

        private Integer inventory;

        /**
         * sku图片
         */
        private String picture;

        /**
         * 规格集合(和详情中specs的顺序一定要保持一致)
         */
        private List<SpecSimple> specs;



    }

    @Data
    public static class Details {

        /**
         * 商品属性集合
         */
        private List<Property> properties;

        /**
         * 商品属性集合
         */
        private List<String> pictures;

    }

    @Data
    public static class Property {

        /**
         * 属性名称
         */
        private String name;

        /**
         * 属性值
         */
        private String value;

    }



}
